import subprocess
import re


def get_network_interfaces_and_ipv6():
    # 创建一个字典来存储网卡名称和对应的 IPv6 地址信息
    nic_ipv6_map = {}

    # 使用 subprocess 调用 ifconfig /all命令获取所有网卡的 IPv6 地址信息
    result = subprocess.run(['ipconfig', '/all'], capture_output=True, text=True)
    output = result.stdout

    # 使用正则表达式匹配网卡名称和 IPv6 地址信息
    # 注意：ipconfig 命令的输出格式可能会因 Windows 版本而异，这里提供的正则表达式可能需要调整
    nic_pattern = re.compile(r'.*适配器(.*):', re.MULTILINE)
    ipv6_pattern = re.compile(r'(.*IPv6 地址).*: (?P<ipv6_address>[a-fA-F0-9:]+)', re.IGNORECASE)

    current_nic_name = None
    for line in output.splitlines():
        nic_match = nic_pattern.match(line)
        if nic_match:
            current_nic_name = nic_match.group(1).strip()
            # 初始化字典中的网卡条目
            nic_ipv6_map[current_nic_name] = []
        elif current_nic_name and ipv6_pattern.search(line):
            ipv6_match = ipv6_pattern.search(line)
            name = ipv6_match.group(1)
            address = ipv6_match.group(2)
            # 存储 IPv6 名称及地址
            nic_ipv6_map[current_nic_name].append((name, address))

    return nic_ipv6_map


if __name__ == "__main__":
    network_interfaces = get_network_interfaces_and_ipv6()
    for nic_name, ipv6_addresses in network_interfaces.items():
        exist = 0
        for name, address in ipv6_addresses:
            if '本地链接' in name:
                continue
            if exist == 0:
                print(f'{nic_name}')
                exist = 1
            print(f'{name} : {address}')